package cn.tedu.apiday07;
//售票窗口案例方式1 继承Thread类
public class Text {
    public static void main(String[] args) {
        MyTickets t = new MyTickets();
        MyTickets t1 = new MyTickets();
        MyTickets t2 = new MyTickets();
        MyTickets t3 = new MyTickets();
        t.setName("1号窗口");
        t1.setName("2号窗口");
        t2.setName("3号窗口");
        t3.setName("4号窗口");
        t.start();
        t1.start();
        t2.start();
        t3.start();

    }
}
//模拟多线程售票
class MyTickets extends Thread{
    static int tickets = 100;//定义静态变量，票数为100  为什么要静态 因为需要全局共享一次
    //开始卖票   业务放在重写的run（）里
    @Override
    public void run() {
        while (true){//一直卖票
            if (tickets>0){
                //问题2  超卖  程序卖出了 -1  0 -2
                //原因：
                //问题3 重卖 程序把一张票卖给多人
                //原因
                //让程序休息一下，如果数据仍然是正确的   那么这个多线程程序才是完美的
                try {
                    Thread.sleep(10);//让程序休息10ms毫秒
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                //问题1 现在卖了4个线程卖了400张票  不符合业务
 //原因是tickets 是成员变量也叫实例变量，只要创建了实例（对象），每个实例（对象）就会拥有tickets资源，创建了4个实例（对象）就会拥有了4个tickets
                //解决方法 如果能把tickets作为全局唯一的全局共享变量，从头到尾只会存在一次，那么就修饰成静态变量，也就是加static
                System.out.println(getName()+"====="+tickets--);
            } else {
                break;
            }

        }
    }
}